package com.c9mj.platform.explore.mvp.presenter.impl;
import com.c9mj.platform.explore.api.ExploreAPI;
import com.c9mj.platform.explore.mvp.model.bean.ExploreListItemBean;
import com.c9mj.platform.explore.mvp.presenter.IExploreListPresenter;
import com.c9mj.platform.explore.mvp.view.IExploreListFragment;
import com.c9mj.platform.util.GsonHelper;
import com.c9mj.platform.util.retrofit.HttpSubscriber;
import com.c9mj.platform.util.retrofit.RetrofitHelper;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import org.reactivestreams.Publisher;
import java.util.ArrayList;
import java.util.Map;
import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
/**
* author: LMJ
* date: 2016/9/9
*/
public class ExploreListPresenterImpl implements IExploreListPresenter {
private final IExploreListFragment view;
public ExploreListPresenterImpl(IExploreListFragment view) {
this.view = view;
}
@Override
public void getExploreList(String explore_id, int offset, int limit) {
RetrofitHelper.getExploreHelper().create(ExploreAPI.class)
.getExploreList(explore_id, offset, limit)
.subscribeOn(Schedulers.io())
.flatMap(new Function<JsonObject, Publisher<ArrayList<ExploreListItemBean>>>() {
@Override
public Publisher<ArrayList<ExploreListItemBean>> apply(JsonObject jsonObject) throws Exception {
for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
if (entry.getValue().isJsonArray()) {
JsonArray array = entry.getValue().getAsJsonArray();
ArrayList<ExploreListItemBean> list = new ArrayList<>();
for (JsonElement element : array) {
list.add((ExploreListItemBean) GsonHelper.parseJson(element, ExploreListItemBean.class));
}
return Flowable.just(list);
}
}
return null;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new HttpSubscriber<ArrayList<ExploreListItemBean>>() {
@Override
public void _onNext(ArrayList<ExploreListItemBean> exploreListItemBeen) {
view.updateRecyclerView(exploreListItemBeen);
}
@Override
public void _onError(String message) {
view.showError(message);
}
});
}
}